package com.virtualparadigm.compositor;

// WORK IN PROGRESS


//public class OneToOneTXAggregate<ThisType extends Identifiable, ThatType extends Identifiable> implements Serializable, Transactional
//{
//	private static final long serialVersionUID = 1L;
//	
//	// Why need "wrapped" Aggregate instance?
//	//   - b/c aggregate is implemented via composition
//	private ThisType instance;
//	private OneToOneTXAggregate<ThatType, ThisType> oneToOneTXAggregate;
//
//	public OneToOneTXAggregate(ThisType instance, OneToOneTXAggregate<ThatType, ThisType> aggregate)
//	{
//		this.setInstance(instance);
//		this.setOneToOneTXAggregate(aggregate);
//	}
//	
//
//	public ThisType getInstance()
//	{
//		return instance;
//	}
//	private void setInstance(ThisType instance)
//	{
//		this.instance = instance;
//	}
//	
//	// package protected
//	OneToOneTXAggregate<ThatType, ThisType> getOneToOneTXAggregate()
//	{
//		return this.oneToOneTXAggregate;
//	}
//	public ThatType getAggregate()
//	{
//		ThatType typedAggregate = null;
//		OneToOneTXAggregate<ThatType, ThisType> oneToOneTXAggregate = this.getOneToOneTXAggregate();
//		if(oneToOneTXAggregate != null)
//		{
//			typedAggregate = oneToOneTXAggregate.getInstance();
//		}
//		return typedAggregate;
//	}
//	
//	// package protected
//	boolean setOneToOneTXAggregate(OneToOneTXAggregate<ThatType, ThisType> oneToOneTXAggregate)
//	{
//		if(this.oneToOneTXAggregate == null)
//		{
//			if(oneToOneTXAggregate != null)
//			{
//				this.oneToOneTXAggregate = oneToOneTXAggregate;
//				oneToOneTXAggregate.setOneToOneTXAggregate(this);
//			}
//		}
//		else
//		{
//			if(!this.oneToOneTXAggregate.equals(oneToOneTXAggregate))
//			{
//				OneToOneTXAggregate<ThatType, ThisType> tempAggregate = this.oneToOneTXAggregate;
//				this.oneToOneTXAggregate = oneToOneTXAggregate;
//				tempAggregate.setOneToOneTXAggregate(null);
//				if(oneToOneTXAggregate == null)
//				{
////					this.handleRemovedAggregate();
//					// dont need to do anything to children with aggregation
//				}
//				else
//				{
//					oneToOneTXAggregate.setOneToOneTXAggregate(this);
//				}
//			}
//		}
//		return true;
//	}
//	
//	public boolean setAggregate(ThatType aggregate)
//	{
//		OneToOneTXAggregate<ThatType, ThisType> oneToOneTXAggregate = null;
//		if(aggregate != null)
//		{
//			oneToOneTXAggregate = new OneToOneTXAggregate<ThatType, ThisType>(aggregate, this);
//		}
//		return this.setOneToOneTXAggregate(oneToOneTXAggregate);
//	}
//
//	// ================================================
//	// TRANSACTIONAL METHODS
//	// ================================================
//	@Override
//	public boolean isTransactionMarkedForRollback()
//	{
//		// TODO Auto-generated method stub
//		return false;
//	}
//
//
//	@Override
//	public void markTransactionForRollback()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//
//
//	@Override
//	public void suspendTransaction()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//
//
//	@Override
//	public void resumeTransaction()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//
//
//	@Override
//	public int getTransactionState()
//	{
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//
//	@Override
//	public void startTransaction()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//
//
//	@Override
//	public void rollbackTransaction()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//
//
//	@Override
//	public void commitTransaction()
//	{
//		// TODO Auto-generated method stub
//		
//	}
//	
//	// ================================================
//	// UTILITY METHODS
//	// ================================================
//	public String toString()
//	{
////		return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
//		return ReflectionToStringBuilder.toString(this, ToStringStyleBuilder.toStringStyle);
//	}
//	public int hashCode()
//	{
//		HashCodeBuilder builder = new HashCodeBuilder();
//	    builder.append(this.getInstance().getResourceIdentifier());
//	    return builder.toHashCode();		
//	}
//	public boolean equals(Object obj)
//	{
//		if (obj == null)
//		{
//			return false;
//		}
//		if (obj == this)
//		{
//			return true;
//		}
//		if (obj.getClass() != getClass())
//		{
//			return false;
//		}
//		OneToOneTXAggregate<ThisType, ThatType> that = (OneToOneTXAggregate<ThisType, ThatType>)obj;
//		EqualsBuilder builder = new EqualsBuilder();
//	    builder.append(this.getInstance().getResourceIdentifier(), that.getInstance().getResourceIdentifier());
//		return builder.isEquals();
//	}
//
//
//
//	
//}